package com.zhongke.common.widget.statusview;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

/**
 * 用于切换布局,使用内容布局的LayoutParams新建一个RelativeLayout，接着把这个新建的RelativeLayout加入到内容布局的父布局中，
 * 再把内容布局从原先的父布局中移除，最后将内容布局加入到这个RelativeLayout中，即层级关系由  内容布局父布局——》内容布局变成
 * 内容布局父布局——》RelativeLayout——》内容布局，中间加了一层RelativeLayout，通过这一层RelativeLayout动态切换loadingView
 * 等各种statusView
 *
 * @author 陈元旺
 */
public class ZKStatusViewHelper implements ZKIStatusViewHelper {
    //内容页(与构造方法里的参数一致)
    private View contentView;
    //各种加载提示布局的父布局(便于控制它的子布局)，实际就是动态新增的那个RelativeLayout
    private ViewGroup parentView;
    private ViewGroup.LayoutParams params;
    //当前正在显示的view
    private View currentView;

    public ZKStatusViewHelper(View view) {
        super();
        this.contentView = view;
        ViewGroup group = (ViewGroup) view.getParent();
        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
        RelativeLayout relativeLayout = new RelativeLayout(view.getContext());
        group.removeView(view);
        //使用内容view的params，保持一致
        group.addView(relativeLayout, layoutParams);
        //填充父布局，以便显示在父布局的中间位置(布局中设定)
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        relativeLayout.addView(view, params);
    }

    private void init() {
        //这里获取的是内容view的params，如果内容view是warp_content的，界面显示可能不雅观(如view是一个ListView
        // 此时提示的界面会显示在上方)
        params = contentView.getLayoutParams();
        //获取内容布局的父布局
        parentView = (ViewGroup) contentView.getParent();
        currentView = contentView;

    }

    @Override
    public View getCurrentLayout() {
        return currentView;
    }

    @Override
    public void restoreView() {
        showLayout(contentView);
    }

    @Override
    public void showLayout(View view) {
        if (parentView == null) {
            init();
        }
        //已显示了的view不再处理
        if (currentView == view) {
            return;
        }
        ViewGroup parent = (ViewGroup) view.getParent();
        if (parent != null) {
            //需要先移除才能添加,一个view不能同时拥有两个父容器
            parent.removeView(view);
        }
        //保持内容view始终不会被移除），因为内容view可能需要被使用到
        for (int i = 0; i < parentView.getChildCount(); i++) {
            if (this.contentView != parentView.getChildAt(i)) {
                parentView.removeView(parentView.getChildAt(i));
            }
        }
        parentView.addView(view, params);
        currentView = view;
    }


//    @Override
//    public void showLayout(int layoutId) {
//        showLayout(inflate(layoutId));
//    }

    @Override
    public View inflate(int layoutId) {
        return LayoutInflater.from(contentView.getContext()).inflate(layoutId, null);
    }
//
//    @Override
//    public Context getContext() {
//        return view.getContext();
//    }
//
//    @Override
//    public View getView() {
//        return view;
//    }
}
